﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using MySql.Data.MySqlClient;

namespace ServicioWPF.Clases
{
    class ReactivoImagen
    {
        private int claveEntidad;        
        private string ruta;
        private string tipo;

        public string Ruta
        {
            get { return ruta; }
            set { ruta = value; }
        }

        public int ClaveEntidad
        {
            get { return claveEntidad; }
            set { claveEntidad = value; }
        }

        public string Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }
        
        FileStream fs;
        byte[] rawData;
        int tamanioArch;

        private void determinarTipoImagen()
        {
            String[] split = ruta.Split('.');
            tipo = split[split.Length - 1];

        }

        public ReactivoImagen(string rutaAfotografia)
        {
            this.ruta = rutaAfotografia;
            determinarTipoImagen();
        }

        public ReactivoImagen()
        {
        }

        public void cargarDesdeArchivo()
        {
            fs = new FileStream(ruta, FileMode.Open, FileAccess.Read);
            tamanioArch = (int)fs.Length;

            rawData = new byte[tamanioArch];
            fs.Read(rawData, 0, (int)tamanioArch);
            fs.Close();
        }

        /// <summary>
        /// metodo que inserta un reactivo en la base de datos
        /// </summary>
        public void insertar()
        {
            cargarDesdeArchivo();
            MySqlConnection ConexionMySql = new MySqlConnection();
            ConexionMySql.ConnectionString = Constantes.CadenaConexion();
            string insert = "";
            try
            {
                ConexionMySql.Open();
                MySqlCommand comand = ConexionMySql.CreateCommand();
                comand.Connection = ConexionMySql;
                    insert = "insert into rImagen(fotografia, tamanio,tipo)" +
                        "values(?laFotografia,?tamFoto,?tipoImg)";
                    comand.CommandText = insert;
                    //como este insert a diferencia del otro si tiene una referecnia a un detenido
                    //vamos a insertar dentro del if el valor del idDetenido
            

                //ya luego que ponemos las variables diferenciadas ponemos las demas
                comand.Parameters.Add("?laFotografia", MySqlDbType.LongBlob);
                comand.Parameters["?laFotografia"].Value = rawData;

                comand.Parameters.Add("?tamFoto", MySqlDbType.Int32);
                comand.Parameters["?tamFoto"].Value = tamanioArch;

                comand.Parameters.Add("?tipoImg", MySqlDbType.VarChar);
                comand.Parameters["?tipoImg"].Value = tipo;
                comand.ExecuteNonQuery();
                ConexionMySql.Close();
            }               
            catch 
            {
                ConexionMySql.Close();
            }

        }

        public void extraer()
        {
            MySqlConnection ConexionMySql = new MySqlConnection();
            ConexionMySql.ConnectionString = Constantes.CadenaConexion();
            /// si vamos a extraer una imagen para un remitido
            /// lo hacemos por medio de su id de fotografia
            string select = "select * from rimagen where claveEntidad =" + claveEntidad + ";";

            try
            {
                ConexionMySql.Open();
                MySqlCommand comand = ConexionMySql.CreateCommand();
                comand.Connection = ConexionMySql;
                comand.CommandText = select;

                MySqlDataReader reader = comand.ExecuteReader();
                if (reader.Read())
                {
                    tamanioArch = reader.GetInt32("Tamanio");
                    tipo = reader.GetString("tipo");
                    rawData = new byte[tamanioArch];
                    reader.GetBytes(reader.GetOrdinal("Fotografia"), 0, rawData, 0, tamanioArch);
                    this.ruta = "c:/foto_" + claveEntidad + "." + tipo;
                    if (File.Exists(ruta)) File.Delete(ruta);
                    FileStream arch = File.Create(ruta);
                    arch.Write(rawData, 0, rawData.Length);
                    arch.Close();
                    //pictureBox1.Image = Image.FromFile("c:/windows/TEMP/foto_" + id_EnBD + "." + tipo);
                }
            }
            catch 
            {
            }
        }

    }
}
